package adsi.domain;

import adsi.persistence.*;
import adsi.utils.*;
import java.util.*;
import org.json.*;

public class Line implements JSONString {

    private long ID;
    private String descripcion;
    private Calendar fechaAlta;
    private Calendar fechaBaja;
    private Calendar fechaDisponibilidadLinea;

    public Line() {
        //values of -1 means no valid value.
        ID = -1;
        descripcion = null;
        fechaAlta = null;
        fechaBaja = null;
        fechaDisponibilidadLinea = null;
    }

    public long getID() {
        return ID;
    }

    public void setID(long ID) throws EntityException {
        //Only DataService should set ID's, so we make sure the calling method
        //is of interfase DataServiceModel.
        this.ID = ID;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Calendar getFechaAlta() {
        return fechaAlta;
    }

    public void setFechaAlta(Calendar fechaAlta) throws EntityException {
        //Only DataService should set creation dates, so we make sure the calling method
        //is of interfase DataServiceModel.

        this.fechaAlta = fechaAlta;
    }

    public Calendar getFechaBaja() {
        return fechaBaja;
    }

    public void setFechaBaja(Calendar fechaBaja) throws EntityException {
        if (fechaAlta == null) {
            if (fechaBaja.before(DateTime.getToday())) {
                throw new EntityException("La fecha de baja no puede ser anterior a la fecha en que se agregará el registro.");
            }
        } else if (fechaBaja.before(fechaAlta)) {
            throw new EntityException("La fecha de baja no puede ser anterior a la fecha de alta");
        }

        this.fechaBaja = fechaBaja;
    }

    public Calendar getFechaDisponibilidadLinea() {
        return fechaDisponibilidadLinea;
    }

    public void setFechaDisponibilidadLinea(Calendar fechaDisponibilidadLinea) throws EntityException {
        if (fechaAlta == null) {
            if (fechaDisponibilidadLinea.before(DateTime.getToday())) {
                throw new EntityException("La fecha de disponibilidad no puede ser anterior a la fecha en que se agregará el registro.");
            }
//Si el cliente decide que también quiere un campo "Disponible" para "linea", descomentar las dos 
//líneas siguientes y agregar el atributo "Disponible" con su setter y getter.
//        } else if(Disponible) {
//            throw new EntityException("La fecha de disponibilidad no puede ser modificada si el equipo ya esta disponible.");
        } else if (fechaDisponibilidadLinea.before(fechaAlta)) {
            throw new EntityException("La fecha de disponibilidad no puede ser anterior a la fecha de alta");
        }

        this.fechaDisponibilidadLinea = fechaDisponibilidadLinea;
    }

    public String toJSONString() {
        return "{\"id\" : \"" + ID +
                "\", \"description\" : \"" + descripcion +
                "\", \"fechaAlta\" : \"" + DateTime.calToString(fechaAlta) +
                "\", \"dropDate\" : \"" + DateTime.calToString(fechaBaja) +
                "\", \"avaliableDate\" : \"" + DateTime.calToString(fechaDisponibilidadLinea) +
                "\"}, ";
    }
}
